package com.chenjt.juc.four_lock;


import java.util.concurrent.TimeUnit;

class Phone{

    public static synchronized void sendEmail(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("-----sendEmail");
    }

    public synchronized void sendSMS(){
        System.out.println("-----sendSMS");
    }


    public void hello(){
        System.out.println("-----hello");
    }

}


/**
 * 以下内容开两线程，保证a线程先启动，a线程调用邮件，b线程调用短信
 *
 * 题目：谈谈你对多线程锁的理解
 * 8锁案例说明
 * 1.标准访问有ab两个线程，请问先打印邮件还是短信
 * 同一个对象锁
 * 先邮件，再短信
 * 2.sendEmail方法中加入暂停3秒钟，请问先打印邮件还是短信
 * 同一个对象锁
 * 先邮件，再短信
 * 3.添加一个普通的hello方法，请问是先打印邮件还是hello
 * 加锁会影响性能
 * 先hello，再邮件
 * 4.有两部手机，请问是先打印邮件还是短信
 * 两部手机是两个不同的对象锁，非要对比只能按处理速度去对比，处理快的先打印
 * 5.有两个静态同步方法，有1部手机，请问先打印邮件还是短信
 * 类锁，不管new几个对象，用的锁都是同一把锁
 * 先邮件，再短信
 * 6.有两个静态同步方法，有2部手机，请问先打印邮件还是短信
 * 类锁，不管new几个对象，用的锁都是同一把锁
 * 先邮件，再短信
 * 7.有一个静态同步方法（邮件），有1个普通同步方法（短信），有1部手机，请问先打印邮件还是短信
 * 加锁影响性能
 * 先短信，再邮件（两个方法，静态和普通用的是不同锁，按处理速度来看结果）
 * 8.有一个静态同步方法（邮件），有1个普通同步方法（短信），有2部手机，请问先打印邮件还是短信
 * 先短信，再邮件（两个方法，静态和普通用的是不同锁，按处理速度来看结果）
 * @author chenjt
 * @date 2024/7/6 15:05
 */
public class Lock8Demo {

    public static void main(String[] args) {

        Phone phone = new Phone();
        Phone phone2 = new Phone();
        new Thread(()->{
            phone.sendEmail();
        },"a").start();


        try {
            // 保证a线程先启动
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(()->{
            phone.sendSMS();
//            phone.hello();
//            phone2.sendSMS();
        },"b").start();


    }


}
